package com.hsjk.szwj.module.mp.service;

import cn.hutool.json.JSONObject;
import com.hsjk.szwj.module.member.api.user.dto.MemberCreateReqDTO;
import com.hsjk.szwj.module.mp.controller.app.vo.AppAuthLoginRespVO;
import com.hsjk.szwj.module.mp.controller.app.vo.AppMiniQrCodeCreateReqVO;
import com.hsjk.szwj.module.mp.dal.dataobject.MiniConfigDO;
import com.hsjk.szwj.module.mp.dal.dataobject.MpConfigDO;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @author chenjiawei
 * @desc
 * @Date 2023/08/08 15:48
 **/
public interface IMpService {
    /**
     * 获取公众号配置信息
     *
     * @return com.hsjk.szwj.module.mp.dal.dataobject.SystemMpDO
     * @author chenjiawei
     * @date 2023/8/8 3:52 下午
     **/
    MpConfigDO getMp();

    /**
     * 根据租户查询公众号配置信息
     *
     * @param tenantId
     * @return com.hsjk.szwj.module.mp.dal.dataobject.SystemMpDO
     * @author chenjiawei
     * @date 2023/8/8 5:52 下午
     **/
    MpConfigDO getMpByTenantId(Long tenantId);

    /**
     * 根据租户查询小程序配置信息
     *
     * @param tenantId
     * @return com.hsjk.szwj.module.mp.dal.dataobject.MiniConfigDO
     * @author chenjiawei
     * @date 2023/8/15 6:15 下午
     **/
    MiniConfigDO getMiniByTenantId(Long tenantId);

    /**
     * 微信授权登录后返回token
     *
     * @param dto
     * @return com.hsjk.szwj.module.mp.controller.app.vo.AppAuthLoginRespVO
     * @author chenjiawei
     * @date 2023/8/10 1:36 上午
     **/
    AppAuthLoginRespVO wxCallbackHandle(MemberCreateReqDTO dto);

    /**
     * 解密
     *
     * @param encryptedData
     * @param jsonObject
     * @param vi
     * @return java.lang.String
     * @author chenjiawei
     * @date 2023/8/15 6:22 下午
     **/
    String wxDecrypt(String encryptedData, JSONObject jsonObject, String vi) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException;

    /**
     * 生成小程序二维码
     *
     * @param reqVO
     * @param response
     * @author chenjiawei
     * @date 2023/9/14 3:38 PM
     **/
    void createQrCode(AppMiniQrCodeCreateReqVO reqVO, HttpServletResponse response);

    /**
     * 生成公众号二维码
     *
     * @param sceneStr
     * @return java.lang.String
     * @author chenjiawei
     * @date 2023/10/10 1:44 PM
     **/
    String createMpQrCode(String sceneStr);

    /**
     * 获取公众号二维码短连接URL
     *
     * @param ticket
     * @return java.lang.String
     * @author chenjiawei
     * @date 2023/10/10 1:48 PM
     **/
    String getMpQrCodShortUrl(String ticket);

    /**
     * 获取公众号二维码长连接URL
     *
     * @param ticket
     * @return java.lang.String
     * @author chenjiawei
     * @date 2023/10/10 1:48 PM
     **/
    String getMpQrCodLongUrl(String ticket);
}
